<?php
/**
 * 文件路径： \application\index\job\Hello.php
 * 这是一个消费者类，用于处理 helloJobQueue 队列中的任务
 */

namespace app\index\job;

use think\Db;
use think\queue\Job;

class JobOrder
{

    /**
     * fire方法是消息队列默认调用的方法
     * @param Job         $job  当前的任务对象
     * @param array|mixed $data 发布任务时自定义的数据
     */
    public function fire(Job $job, $data)
    {
        // 如有必要,可以根据业务需求和数据库中的最新数据,判断该任务是否仍有必要执行.
        $isJobDone = $this->doOrder($data);
        if ($isJobDone) {
            //如果任务执行成功， 记得删除任务
            $job->delete();
        } else {
            if ($job->attempts() > 3) {
                //通过这个方法可以检查这个任务已经重试了几次了
                print("<warn>Job has been retried more than 3 times!" . "</warn>\n");
                $job->delete();
            }
        }
    }

    public function doOrder($data)
    {
        $order_id = $data['order_id'];

        $info = Db::name('order')->where('id', $order_id)->find();
        if ($info && $info['status'] == 2) {
            if(strtotime($info['end_time']) > time()){
                return true;
            }else{
                // 修改订单
                Db::name('order')->where('id', $order_id)->update(['status' => 3, 'update_time' => time()]);

                // 修改车辆状态
                $user_team_car_info = Db::name('user_team_car')->where('car_id', $info['car_id'])->find();
                if($user_team_car_info){
                    Db::name('user_team_car')->where('car_id', $info['car_id'])->update(['status' => 1, 'start_date' => null, 'end_date' => null, 'update_time' => time()]);
                }
                return true;
            }
        } else {
            return false;
        }
    }
}
